Windows Subsystem for Linux(WSL)を用いたC開発環境
Windows NTには元々POSIX SubsystemやInterix Subsystemと呼ばれるUNIX互換機能がありましたが、Windows 10になってからLinuxを完全にエミュレーションする機能がつきました。これをWindows Subsystem for Linux(WSL)といいます。WSLにはWSL1とWSL2がありますが、実装方法が全く異なります。WSL1は、Windows 10のOSカーネル(NT Kernel)に対してSubsystemとして動作していて、Linuxのシステムコールが変換されてNT Kernelに発行されています。WSL2はHyper-Vと呼ばれるハイパーバイザの上に実装されており、NT Kernelとは独立してLinux Kernelそのものが動いています。WSL2の方がどうしてもメモリ消費が大きくなりますが、Linuxとの互換性は向上しており、またファイルの読み書き速度が速くなっています。WSL2はWindows 10 バージョン2004以降でまず利用可能になり、その後1903や1909でも利用可能になりました。つまり、2020年10月以降はサポートされている全ての64bit版Windows 10で利用可能になったことになります。 このWSLは1であれ2であれ、利用者から見ればほとんどLinuxとして動作します。プログラミング演習ではLinuxを用いてCのコーディングを行っている皆さんには、C開発環境として優れていますので、ちょっとインストールが面倒ですが、導入しておくことをおすすめします。(2020年度のプログラミング演習1でも標準環境となりました)
WSLの利用にはWindows 10の64bit版が必要です。インストールの手順は以下の通りです(ただし、この過程で2GB程度のダウンロードが発生しますので、注意してください)。
Windows 10 バージョン1909以前の場合、Windowsの機能を追加してWindows Subsystem for Linuxを有効にする。(Windows 10 バージョン2004以降はWIndows Subsystem for Linuxは必要に応じて導入されるので明示的に有効化しなくても良くなったようだ。ここは飛ばして、下記のDebian等の導入に進んでよい。)
スタートボタンhttps://gyazo.com/8864bfb9f0d6875ea6800e6e8fca4553を押し、設定を選んで「アプリ」を選択する。
https://gyazo.com/e95f1cae0ce1820368145974c66d5e9c
https://gyazo.com/6728d888bbb95434c3cc79e4b9df08db
右上の「プログラムと機能」を選択。この項目がない時は、設定画面の横幅を広げると「関連設定」以下が現れる。
https://gyazo.com/1d9112089d79ab917322c9f2808a286d
左側の「Windowsの機能の有効化または無効化」を選択
https://gyazo.com/e8f0d833ee3e15f915a055edaa7c457f
スクロールした中ほどに「Windows Subsystem for Linux」があるので、これをチェックしてOKを押す。(Windows 10 バージョン2004ではこの項目はない。だが必要に応じてインストールされるようなので、次に進んでよい。)
https://gyazo.com/158d0a3f4095430700c00fae259e3f89
しばらく待たされた後に再起動を促されるので、再起動する。
https://gyazo.com/1bc833a619250d1842bd284553b551d0
再起動後、再びログインする。この状態だとWSL用のSubsystemは動作しているが、Linux環境自体がない。そこでLinux環境をMicrosoft Storeから導入する。ここではDebianをインストールする(Rainbow端末ではCentOSが利用されているが、残念ながらMicrosoft Storeではきちんとサポートされていない)。普通はここをクリックすれば導入できる。うまく行かない場合は下記の手順でMicrosoft Store内を探してインストールする。 Microsoft Storeを起動する。スタートメニューにピン止めされていない場合は、メニュー内から探してクリックする。
https://gyazo.com/7c1b6aba584aa57bf9979eaa079d9dae
「検索」を押し、debianと入力する。
https://gyazo.com/e196a0cd3e73a1c2b223a97e3b028c82
「入手」を選択するとインストールが始まる。Ubuntuは数百MBあるので、ダウンロードとインストールに少し時間がかかる。
https://gyazo.com/dd038dfe47c2da7015e894f20b1934b4
インストールが終わったら「起動」ボタンが現れるので、押して起動する。
https://gyazo.com/2cc35718881e2468f2c73fc6c56635a0
初期化が始まる。これも結構時間がかかる。初期化が終わると、Linux内で使うアカウントの設定を求められる。ユーザ名はWindows側で使っているものと同じでなくとも構わない。覚えやすい名前を、英数字および-_からなる文字列32文字以下で決める(-は先頭には使えない)。ここではユーザ名とtetsuとした。パスワードもWindowsと同じである必要はないが、WSLはログインにはパスワードは不要であり、必要になるのはsudoを使って管理者権限が必要になる操作を行う時くらいなので、利用頻度が低いため忘れやすい。むしろWindowsで使っているパスワードと同じにした方が混乱が少ないだろう。
https://gyazo.com/bcd2581da06d91d95b419b1f4d48da6b
これで一応WSLのDebian Linuxが使えるようになる。ユーザ名@ホスト名というプロンプトが出ていればインストールは成功である。
LinuxではWindowsと違い、セキュリティ対応のためのアップデート(ソフトウェア更新)は自動では行われない。なので、Debianを使い始めたら、常にシステムを最新に保つため、aptコマンドを用いてシステムを最新に保つ習慣をつけよう。可能なら使う際に毎回以下の手順でシステムのソフトウェアを更新する。
apt updateコマンドで最新のソフトウェアのリスト(レポジトリ)を更新する。ただし、一般利用者の権限ではaptコマンドは利用できないので、一時的に管理者権限を取得するsudoコマンドと併用する。sudo apt updateと入力する。パスワード入力を求められるので、インストール時に設定したパスワードを入力する。
https://gyazo.com/d0068c1540074325e0369487c3642206
https://gyazo.com/d29e7bdbb63c19426121587394b403ce
更新可能なソフトウェアがあるようならapt upgradeコマンドで一括更新する。sudoコマンドと併用する必要がある。
https://gyazo.com/d4d911cb6c2e5692b7d410e338cfc1bd
終了したら再度apt updateコマンドをsudoコマンドと併用して実行して、最新状態であることを確認する。
https://gyazo.com/d6a49755d009b2891b7f6182af191ae0
いくつものソフトウェアを導入していると、apt updateするとUpgradableなソフトウェアがいくつかあるにも関わらず、apt upgradeを実行しても更新されないことがある。これはいくつかのソフトウェアが旧いバージョンに依存しているなど、いくつかの要因がある。いずれにせよapt upgradeでアップグレードされないものがいくつか残った場合、特に使用上の不都合がなければ使い続けても良い。
実はdebian系のLinuxでは標準状態ではCコンパイラやデバッガが含まれていない。ここではコンパイラとしてGCCを、デバッガとしてGDBをインストールする。インストールにはapt installコマンドを使う。これもsudoコマンドと併用が必要である。必要なパッケージは多くがbuild-essentialに含まれている。gdbは別途導入が必要である。なのでsudo apt install build-essential gdbとする。
https://gyazo.com/e40d3fb568f879d6506d238f00261351
導入できたら最低限GCCが使えるか確かめてみよう。エディタには標準で入っているnanoを使う。
nano hello.cと入力して、nanoエディタを起動する。
https://gyazo.com/420332bccc0193925e540196f0f15492
簡単なプログラムを書いてみる。nanoはシンタックスハイライティングをサポートしているので、Cの予約語は色が変わって見やすい。下2行に出ているのは使い方である。^付きの表記はCtrlを押しながら何かのキーを押すことを表す。同様にM-がついた表記はAltキーを押しながら何かのキーを押すことを表す。例えば^Gは、Ctrlを押しながらGを押すとヘルプ画面になることを表している。
https://gyazo.com/ae2fbbb8165321b7a97844987507c739
下からコピペしてもよい。WSLの端末ではマウスによるコピーとペーストができる。下のプログラムをコピーし、nanoの編集画面の上でマウスの右クリックをするとペーストされる。うまくいかないときは、nano自身のマウスサポートと競合している(nanoのマウス機能はカーソル移動などに使う)。Altキーを押しながらMを押し、Mouse support disabledと表示させてnano側のマウスサポートを無効にする。
code:hello.c
int main(void)
{
printf("Hello, WSL!\n");
return 0;
}
終わったらCtrlを押しながらOを押すと書き込み、Ctrlを押しながらXを押すと終了する。書き込み時にはファイル名を尋ねられるが、この場合はhello.cそのままなので単にEnterを押せばよい。
コンパイルして実行する。gcc -o hello hello.cで、ソースファイルhello.cを実行ファイルhelloにコンパイルする。コンパイルが成功したら、./helloで実行する。
https://gyazo.com/cc61218e5ab7b52c2746f22e05f7feb1
ここまで来たら、スタートメニューの中にもDebianというメニューが増えているので、これを選ぶといつでもdebianにログインした状態のコマンドプロンプトが利用できます。PowerShellからdebianというコマンドを入力しても同様にコマンドプロンプトが使えます。